package com.up.upzl.biz.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.Table;
import org.springframework.util.StringUtils;

import com.google.common.collect.ImmutableBiMap;
import com.up.upzl.base.domain.BaseDomain;
import com.up.upzl.biz.enums.Gender;

import lombok.Getter;
import lombok.Setter;

/**
 * 商铺
 *
 * @author joker
 *
 */
@Getter
@Setter
@Entity
@Table(appliesTo = "shop")
public class Shop extends BaseDomain {

	private static final long serialVersionUID = 3586785706053144731L;

	/**
	 * 联系人
	 */
	private String linkman;
	/**
	 * 性别
	 */
	private Gender gender;
	/**
	 * 电话
	 */
	private String phone;
	/**
	 * 其他联系方式
	 */
	private String contactWay;
	/**
	 * 商铺店招(复选)(平面店招)
	 */
	private Boolean signagePlane;
	/**
	 * 商铺店招(复选)(立面店招)
	 */
	private Boolean signageFacade;

	/**
	 * 年租金（整数,万元）
	 */
	private BigDecimal yearlyRent;

	public String getYearlyRentText() {
		if (yearlyRent == null) {
			return null;
		} else if (yearlyRent.intValue() == -2) {
			return "面议";
		} else {
			return yearlyRent + "万元/年";
		}
	}

	/**
	 * 月租金（2位小数,元/月）
	 */
	private BigDecimal monthlyRent;

	public String getMonthlyRentText() {
		if (monthlyRent == null) {
			return null;
		} else if (monthlyRent.intValue() == -2) {
			return "面议";
		} else {
			return monthlyRent + "元/月";
		}
	}

	/**
	 * 日租金（2位小数,元/天/㎡）
	 */
	private BigDecimal dailyRent;
	
	public String getDailyRentText() {
		if (dailyRent == null) {
			return null;
		} else if (dailyRent.intValue() == -2) {
			return "面议";
		} else {
			return monthlyRent + "元/天/㎡";
		}
	}
	/**
	 * 转让费（1位小数,万元）
	 */
	private BigDecimal transferFee;

	public String getTransferFeeText() {
		if (transferFee == null) {
			return null;
		} else if (transferFee.intValue() == -1) {
			return "无";
		} else if (transferFee.intValue() == -2) {
			return "面议";
		} else {
			return transferFee + "万元";
		}
	}

	/**
	 * 押金
	 */
	private String pledgeCash;
	/**
	 * 支付方式
	 */
	private String payType;
	/**
	 * 商铺租售状态（0：租赁中，1：已成交，2：已租出一部分，3：停转/租-违建拆除，4：停转/租-房东收回，5：停转/租-被查封，6：停转/租-继续经营）
	 */
	private Integer status;
	/**
	 * 租售类型(0:商铺出租 1:商铺转租/生意转让)
	 */
	private Integer rentType;
	/**
	 * 分时出租(0:否 1:是-早间出租 2:是-晚间出租 3:是-早、晚出租)
	 */
	private Integer timeRent;
	/**
	 * 当前租约
	 */
	private String currLease;
	/**
	 * 还剩余
	 */
	private String residue;
	/**
	 * 最长可租约
	 */
	private String maxLease;
	/**
	 * 续约情况(继续使用原租约)
	 */
	private Boolean leaseCase0;

	/**
	 * 续约情况(另签一份)
	 */
	private Boolean leaseCase1;
	/**
	 * 商铺类型
	 */
	private Type type;

	public enum Type {
		步行商业街, 社区商业, 写字楼配套, 市场, 百货购物中心, 独立商业, 学校, 村镇商铺
		//商业街商铺, 社区底商, 写字楼配套, 临街门面, 档口摊位, 购物百货中心
	}

	/**
	 * 建筑面积
	 */
	private BigDecimal buildArea;
	
	/**
	 * 使用面积
	 */
	private BigDecimal useArea;
	/**
	 * 是否分隔(false 否；true 是)
	 */
	private Boolean separate;
	/**
	 * 是否临主干道/两车道以上道路(false 否；true 是)
	 */
	private Boolean frontage;
	/**
	 * 楼层 一层、二层、三层、四层、高层、半地下
	 */
	private Boolean floor1;
	private Boolean floor2;
	private Boolean floor3;
	private Boolean floor4;
	private Boolean floorHigh;
	private Boolean floorUnder;
	/**
	 * 层高
	 */
	private BigDecimal floorHeight;
	/**
	 * 面宽
	 */
	private BigDecimal faceWidth;
	/**
	 * 进深
	 */
	private BigDecimal depth;
	/**
	 * 朝向
	 */
	private Orientation orientation;

	public enum Orientation {
		东, 南, 西, 北, 东南, 东北, 西南, 西北
	}

	/**
	 * 产权
	 */
	private Property property;

	public enum Property {
		商业, 住宅, 商住两用, 其他
	}

	/**
	 * 其他产权
	 */
	private String otherProperty;
	/**
	 * 配套
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_supporting", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_supporting_id"))
	private List<ShopSupporting> shopSupportings;

	/**
	 * 当前经营/经营业态（一级）
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "parent_manage_type_id")
	private ShopBusinessType parentManageType;

	/**
	 * 当前经营/经营业态（二级）
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "son_manage_type_id")
	private ShopBusinessType sonManageType;

	/**
	 * 特色标签
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_tag", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_tag_id"))
	private List<ShopTag> shopTags;
	/**
	 * 证照（0：不可办照，1：可办照，2：公司照可过户，3：有照可增项，4：大照/集体照，5：个人照可用，6：公司照可用，7：个人照可过户）
	 */
	private Integer license;
	/**
	 * 已有证件
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_paper", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_paper_id"))
	private List<ShopPaper> shopPapers;
	/**
	 * 经营状态（0：营业中，1:空铺）
	 */
	private Integer manageStatus;
	/**
	 * 店名
	 */
	private String shopName;
	/**
	 * 本店优势
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_advantage", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_advantage_id"))
	private List<ShopAdvantage> shopAdvantages;
	/**
	 * 证件照
	 */
	@Column(length = 4000)
	private String paperImgs;

	/**
	 * 展示图片
	 */
	public String[] getPaperImgArray() {
		if (StringUtils.isEmpty(paperImgs)) {
			return null;
		} else {
			return paperImgs.split(",");
		}
	}

	/**
	 * 过往经营最大的问题
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_issue", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_issue_id"))
	private List<ShopIssue> shopIssues;
	/**
	 * 品牌情况（0：个体，1：加盟）
	 */
	private Integer brandStatus;
	/**
	 * 不可经营业态(一级)
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "parent_no_type_id")
	private ShopBusinessType parentNoType;
	/**
	 * 不可经营业态(二级)
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "son_no_type_id")
	private ShopBusinessType sonNoType;

	/**
	 * 市
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "city_id")
	private Area city;
	/**
	 * 区域
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "area_id")
	private Area area;
	/**
	 * 商圈
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "business_area_id")
	private BusinessArea businessArea;

	/**
	 * 道路
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "road_area_id")
	private Road road;

	/**
	 * 详细地址
	 */
	private String realAddress;
	

	/**
	 * x坐标
	 */
	private String positionX;

	/**
	 * y坐标
	 */
	private String positionY;
	/**
	 * 环线(0:不限,1:2环内,2:2-3环,3:3-4环,4:4-5环,5:5环外)
	 */
	private Integer loopLine;

	/**
	 * 选择图片
	 */
	@Column(length = 4000)
	private String imgs;

	/**
	 * 展示图片
	 */
	public String[] getImgArray() {
		if (StringUtils.isEmpty(imgs)) {
			return null;
		} else {
			return imgs.split(",");
		}
	}
	
	/**
	 * 道路阻隔
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_road_obstruct", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_obstruct_id"))
	private List<ShopObstruct> shopRoadObstructs;

	/**
	 * 路宽
	 */
	private BigDecimal roadWidth;
	/**
	 * 装修情况(0:精装,1:简装,2:毛坯/清水房)
	 */
	private Integer fit;

	/**
	 * 介绍
	 */
	private String introduce;
	/**
	 * 店前人流
	 */
	private Integer personFlow;
	/**
	 * 店前阻隔
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_obstruct", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_obstruct_id"))
	private List<ShopObstruct> shopObstructs;
	/**
	 * 绿化带/隔离带 阻隔距离
	 */
	private BigDecimal distance;
	/**
	 * 遮挡程度
	 */
	private String keepOut;

	/**
	 * 经营时长
	 */
	private BigDecimal manageTime;
	/**
	 * 空转转让费
	 */
	private BigDecimal spinFee;
	/**
	 * 上一手转让费
	 */
	private BigDecimal lastFee;
	/**
	 * 上一家投资额
	 */
	private BigDecimal lastAmount;
	/**
	 * 转让内容
	 */
	@ManyToMany
	@JoinTable(name = "shop_shop_transfer", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "shop_transfer_id"))
	private List<ShopTransfer> shopTransfers;

	/**
	 * 最大容电量
	 */
	private Integer maxMeasure;

	/**
	 * 营业额单位
	 */
	private Integer turnoverUnit;

	/**
	 * 营业额
	 */
	private BigDecimal turnover;
	/**
	 * 客单价
	 */
	private Integer customerPrice;

	/**
	 * 编号
	 */
	private String shopNumber;

	/**
	 * 名称
	 */
	private String name;
	
	

	/**
	 * 提交状态
	 */
	private SubmitStatus submitStatus;

	public enum SubmitStatus {
		提交审核, 核铺待维护, 核实无效
	}

	public String getSubmitStatusName() {
		if(null!=submitStatus) {
			return submitStatus.name();
		}
		return "";
	}
	/**
	 * 核实人账号
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "verification_account_id")
	private SysAccount verificationAccount;

	/**
	 * 上架状态（0 下架 1 上架）
	 */
	private Integer onlineStatus;
	/**
	 * 商铺来源
	 */
	private CreateType createType;

	
	
	public void setAreaText(String areaText) {
		if(!StringUtils.isEmpty(areaText)) {
			this.area=new Area();
			area.setName(areaText);
		}
	}
	
	
	
	public void setSource(String source) {
		if(!StringUtils.isEmpty(source)) {
			if(source.equals("58")) {
				this.createType=CreateType.五八同城;
			}else if(source.equals("FANG")) {
				this.createType=CreateType.房天下;
			}else if(source.equals("ANJUKE")) {
				this.createType=CreateType.安居客;
			}else if(source.equals("LEPU")) {
				this.createType=CreateType.乐铺;
			}else if(source.equals("GANJI")) {
				this.createType=CreateType.赶集;
			}
		}
	}
	
	
	
	
	public enum CreateType {
		乐铺, 安居客,五八同城, 赶集, 房天下, 拍店, 优铺租赁APP提交, 后台录入;
	}

	/**
	 * 核铺是否以导入商铺（0 否 1 是）ƒ
	 */
	private Integer isImport;

	/**
	 * 核铺一级审核
	 */
	private ShopAudit shopAudit;

	public enum ShopAudit {
		待认领, 待核实, 待审核, 审核已通过, 审核未通过;
	}

	/**
	 * 核铺二级审核
	 */
	private ShopFlow shopFlow;

	public enum ShopFlow {
		待认领, 待核实, 核实未通过, 核铺待维护, 核铺无效, 待审核, 审核已通过, 审核未通过;
	}

	/**
	 * 认领时间
	 */
	private Date claimTime;
	/**
	 * 核实时间
	 */
	private Date verifyTime;
	/**
	 * 审核时间
	 */
	private Date auditTime;

	/**
	 * 拒绝原因
	 */
	private String remark;
	
	/**
	  * 数据源类型
	  * 
	  * @author geeks
	  *
	  */
	 public static class Source {

	  /**
	   * 数据源
	   */
	  public static final Map<String, String> KVS = ImmutableBiMap.of(Source.FIVE8, "58同城",
	    Source.FANG, "房天下",Source.LEPU, "乐铺", Source.ANJUKE, "安居客",
	    Source.GANJI, "赶集网");

	  /**
	   * 58
	   */
	  public static final String FIVE8 = "58";

	  /**
	   * 赶集
	   */
	  public static final String GANJI = "GANJI";

	  /**
	   * 房天下
	   */
	  public static final String FANG = "FANG";

	  /**
	   * 乐铺
	   */
	  public static final String LEPU = "LEPU";

	  /**
	   * 安居客
	   */
	  public static final String ANJUKE = "ANJUKE";

	 }
	 
	 /**
	  * 创建人
	  */
	 private  String userCode;
	
}
